package info.u250.c2d.tests.animations;

import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import info.u250.c2d.engine.Engine;
import info.u250.c2d.engine.EngineDrive;
import info.u250.c2d.engine.Scene;
import info.u250.c2d.engine.resources.AliasResourceManager;
import info.u250.c2d.graphic.AdvanceSpriteImage;
import info.u250.c2d.graphic.AnimationSprite;
import info.u250.c2d.graphic.C2dStage;

public class ActionJump extends Engine {
    @Override
    protected EngineDrive onSetupEngineDrive() {
        return new EngineX();
    }

    @Override
    public void dispose() {
        super.dispose();
    }

    private class EngineX implements EngineDrive {
        @Override
        public void onResourcesRegister(AliasResourceManager<String> reg) {
            reg.textureAtlas("Anim", "data/animationsprite/turkey.atlas");
        }

        @Override
        public void dispose() {
        }

        @Override
        public EngineOptions onSetupEngine() {
            final EngineOptions opt = new EngineOptions(
                    new String[]{"data/animationsprite/"}, 800, 480);
            return opt;
        }

        @Override
        public void onLoadedResourcesCompleted() {
            Engine.setMainScene(new MainScene());
        }
    }

    private static class MainScene extends C2dStage implements Scene {
        final AdvanceSpriteImage actor;

        public MainScene() {
            actor = new AdvanceSpriteImage(new AnimationSprite(0.05f, Engine.resource("Anim", TextureAtlas.class), "fly"));
            actor.setPosition(200, 20);
            actor.setRotation(90);
            actor.setOrigin(actor.getWidth() / 2, actor.getHeight() / 2);
            actor.addAction(Actions.forever(
                    Actions.sequence(
                            Actions.parallel(
                                    Actions.moveBy(0, 300, 0.5f, Interpolation.pow2Out),
                                    Actions.moveBy(200, 0, 0.5f),
                                    Actions.scaleTo(0.7f, 0.7f, 0.5f)
                            ),
                            Actions.parallel(
                                    Actions.moveBy(0, -300, 0.5f, Interpolation.pow2In),
                                    Actions.moveBy(200, 0, 0.5f),
                                    Actions.scaleTo(1f, 1f, 0.5f)
                            ),
                            Actions.parallel(
                                    Actions.moveBy(0, 300, 0.5f, Interpolation.pow2Out),
                                    Actions.moveBy(-200, 0, 0.5f),
                                    Actions.scaleTo(0.7f, 0.7f, 0.5f)
                            ),
                            Actions.parallel(
                                    Actions.moveBy(0, -300, 0.5f, Interpolation.pow2In),
                                    Actions.moveBy(-200, 0, 0.5f),
                                    Actions.scaleTo(1f, 1f, 0.5f)
                            )

                    )
            ));
            this.addActor(actor);
        }

        @Override
        public void render(float delta) {
            this.act(delta);
            this.draw();
        }

        @Override
        public InputProcessor getInputProcessor() {
            return null;
        }

        @Override
        public void update(float delta) {
        }

        @Override
        public void hide() {
        }

        @Override
        public void show() {
        }
    }
}
